package com.allwees.bs.c.module.order.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.allwees.bs.c.module.order.dto.CartDTO;
import com.allwees.bs.c.module.order.entity.CartEntity;
import com.allwees.bs.c.module.order.req.CartCheckoutReq;
import com.allwees.bs.c.module.order.req.CartItemReq;
import com.allwees.bs.c.module.order.req.CartReq;
import com.allwees.bs.c.module.order.req.CartUseCashReq;

import java.util.List;

/**
 * @author yangylsky
 */
public interface CartService extends IService<CartEntity> {

    CartDTO getCartByUser(String userUuid);

    CartDTO getCart(String cartUuid);

    CartDTO getCart(String cartUuid, boolean isNotUseShippingStrategy);

    void clearCart(String cartUuid);

    void clearUserCart(String userUuid);

    CartDTO addSku(String cartUuid, String skuUuid, Integer count,String userUuid, String channelUuid);

    CartDTO reduceSku(String cartUuid, String skuUuid, Integer count, String channelUuid);

    CartDTO deleteCartItem(CartReq req);

    /**
     * 计算传入的CartItem价格和运费
     *
     * @param itemVos
     * @return CartDTO
     */
    CartDTO calculateCartItems(List<CartItemReq> itemVos);

    /**
     * 登录时把未登录时加入的购物车合并到登录后购物车中
     *
     * @param cartUuid
     * @param cartItems
     * @return CartDTO
     */
    CartDTO mergeCartItems(String cartUuid, List<CartItemReq> cartItems,String userUuid, String channelId);

    /**
     * @param req
     * @return
     */
    CartDTO useCoupon(String userUuid, CartCheckoutReq req);

    /**
     *
     * @param userUuid
     * @param req
     * @return
     */
    CartDTO useCash(String userUuid, CartUseCashReq req);
}
